package demo05;

import java.util.Scanner;

public class Otyaku implements Runnable {
    private Manjyuu m; // 锁

    public Otyaku(Manjyuu m) {
        this.m = m;
    }

    @Override
    public void run() {
        while (m.getCount() >= 0) { // 无限循环买包子，有两个退出循环方式：1.客人要的包子名没有 2.客人钱不够
            try { // 客人线程晚跑0.1s，防止撞线程
                Thread.sleep(100);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
            synchronized (m) {
                System.out.print("我要吃：");
                m.setName(new Scanner(System.in).next()); // 客人根据老板的价目表，说出想要的包子
                m.notify(); // 包子名已经提出，唤醒老板线程
                try {
                    m.wait(); // 等待老板线程给包子
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                /*
                 *  库存信息在老板线程中因一些原因设置为负数，分别代表以下情况：
                 *  -2：没有该包子
                 *  -1：客人没钱了
                 *  对应的负数标记代表客人对应的情况，输出对应的提示信息，而只要是负数，就会退出循环，结束程序
                 */
                if (m.getCount() == -2) {
                    System.out.println("这里不卖" + m.getName() + "，去换一家看看...");
                } else if (m.getCount() == -1) {
                    System.out.println("没钱了，回家...");
                } else {
                    System.out.println(m.getName() + "真好吃~~~"); // 吃包子
                }
            }
        }
    }
}
